import { NextRequest, NextResponse } from 'next/server';
import { UserModel } from '@/models/user';
import { comparePassword, generateToken } from '@/utils/auth';

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { username, password } = body;
    
    console.log(`尝试登录用户: ${username}`);
    
    // 验证必填字段
    if (!username || !password) {
      console.log('登录失败: 用户名或密码为空');
      return NextResponse.json(
        { error: '用户名和密码不能为空' },
        { status: 400 }
      );
    }
    
    // 查找用户
    const user = await UserModel.findByUsername(username);
    console.log('数据库用户查询结果:', user ? '用户存在' : '用户不存在');
    
    if (!user) {
      console.log('登录失败: 用户不存在');
      return NextResponse.json(
        { error: '用户名或密码错误' },
        { status: 401 }
      );
    }
    
    // 验证密码
    const isPasswordValid = await comparePassword(password, user.password);
    console.log('密码验证结果:', isPasswordValid ? '密码正确' : '密码错误');
    
    if (!isPasswordValid) {
      console.log('登录失败: 密码错误');
      return NextResponse.json(
        { error: '用户名或密码错误' },
        { status: 401 }
      );
    }
    
    // 生成JWT令牌
    const token = generateToken({
      id: user.id,
      username: user.username
    });
    
    console.log('登录成功, 生成令牌');
    
    // 返回用户信息和令牌（不包含密码）
    const { password: _, ...userWithoutPassword } = user;
    
    return NextResponse.json({
      message: '登录成功',
      user: userWithoutPassword,
      token
    });
    
  } catch (error) {
    console.error('登录处理过程中发生错误:', error);
    return NextResponse.json(
      { error: '服务器错误，请稍后再试' },
      { status: 500 }
    );
  }
}
